package RMIClient;

import java.rmi.Naming;
import java.rmi.RemoteException;
import java.util.List;

import javax.swing.JOptionPane;

import beans.ClienteBean;
import beans.FacturaBean;
import beans.ListaPreciosBean;
import beans.OrdenCompraBean;
import beans.PedidoVentaBean;
import beans.CotizacionBean;
import beans.UsuarioBean;
import interfaz.TDAOficinaDeVenta;

public class RMIClienteOFV
{
	private static RMIClienteOFV instancia;
	private String hostname = "localhost";
	TDAOficinaDeVenta rmiController;
		
	public static RMIClienteOFV getInstancia()
	{
		if (instancia==null)
		{
			instancia = new RMIClienteOFV();
		}
		return instancia;
	}
	
	public RMIClienteOFV()
	{
		instancia = this;
		getStub();
	}
	
	public static void main(String[] args)
	{
		new RMIClienteOFV();
	}
	
	
	private boolean getStub() 
	{
		try 
		{
			rmiController = (TDAOficinaDeVenta)Naming.lookup ("//"+hostname+"/rmiController");
			System.out.println("Conexion establecida");
			return true;
		} 
		catch (Exception e) 
		{
			System.out.println("No se pudo establecer la conexion");
			JOptionPane.showMessageDialog(null, "Error no me puedo conectar al server \n "+"//"+hostname+"/rmiController");
		}
		return false;
	}

	
	public void altaCliente( ClienteBean clienteBean )
	{
		try 
		{
			rmiController.agregarCliente(clienteBean);

		} 
		catch (RemoteException e) 
		{
			e.printStackTrace();
		}
				
	}
	
	public void bajaCliente( ClienteBean clienteBean )
	{
		try
		{
			rmiController.bajaCliente(clienteBean);
		}
		catch (RemoteException e)
		{
			e.printStackTrace();
		}
	}
	
	public void modiuficarCliente( ClienteBean clienteBean )
	{
		try
		{
			rmiController.modificarCliente(clienteBean);
		}
		catch (RemoteException e)
		{
			e.printStackTrace();
		}
	}
	
/*
	public boolean modificarODV(OficinaVentaBean odvBean)
	{
		try
		{
			return rmiController.modificarODV(odvBean);
		}
		catch (RemoteException e)
		{
			e.printStackTrace();
		}
		return false;
	}
*/	
	public ClienteBean buscarClientesPorCriterio( String razonSocialCliente, String cuitCliente) 
	{
		ClienteBean clienteBean = new ClienteBean();
		try
		{
			List<ClienteBean> listaBeanCliente = rmiController.obtenerClientesPorCriterio( razonSocialCliente,cuitCliente );
			if(!listaBeanCliente.isEmpty())
			{
				clienteBean = listaBeanCliente.get(0);
			}
		}
		catch (RemoteException e)
		{
			e.printStackTrace();
		}
		return clienteBean;
	}
	
	
	public ClienteBean buscarCliente(String cuit) 
	{
		try
		{
			return rmiController.buscarClientePorCuit(cuit);		
		}
		catch (RemoteException e)
		{
			e.printStackTrace();
			return null;
		}	
	}
	
	
	/*
	public List<OficinaVentaBean> cargarComboODV()
	{
		try 
		{
			return rmiController.obtenerODV(); //falta

		}
		catch (RemoteException e) 
		{
			e.printStackTrace();
		}
		return new ArrayList<OficinaVentaBean>();	
	}
	*/	
	public UsuarioBean loginUsuario (UsuarioBean usuarioBean)
	{
		try
		{
			return rmiController.loginUsuario(usuarioBean);
		}
		catch (RemoteException e)
		{
			e.printStackTrace();
		}
		return null;
	}
	
	public boolean cargarListaPrecios(ListaPreciosBean listaDePrecios)
	{
		try
		{
			return rmiController.cargarListaPrecios(listaDePrecios);
		}
		catch (RemoteException e)
		{
			e.printStackTrace();
		}
	return false;
}
	
	/*PRUEBA DE METODOS DE NEGOCIO*/

	public boolean generarCotizacion(CotizacionBean solCotBean)
	{
		try
		{
			rmiController.generarCotizacion(solCotBean);
		}
		catch (RemoteException e)
		{
			e.printStackTrace();
		}
		return false;
	}
	
	public List<CotizacionBean> obtenerCotizacionPorCliente(String cuitCliente)
	{
		try
		{
			return rmiController.obtenerCotizacionPorCliente(cuitCliente);
		}
		catch (RemoteException e)
		{
			e.printStackTrace();
		}
		return null;
	}
	

	public CotizacionBean generarComparativaPrecios( int IdCotizacionBean )
	{
		try
		{
			return rmiController.generarComparativaPrecios(IdCotizacionBean);
		}
		catch (RemoteException e)
		{
			e.printStackTrace();
		}
		return null;
	}
	
	public boolean aprobarCotizacion(CotizacionBean solCotBean)
	{
		try
		{
			return rmiController.aprobarCotizacion( solCotBean );
		}
		catch (RemoteException e)
		{
			e.printStackTrace();
		}
		return false;
	}
	
	
	public OrdenCompraBean generarOrdenCompra( CotizacionBean cot)
	{
		try
		{
			return rmiController.generarOrdenCompra( cot );
		}
		catch (RemoteException e)
		{
			e.printStackTrace();
		}
		return null;
	}
	
	
	public FacturaBean generarFactura( PedidoVentaBean p, String tipoFactura, String condVenta )
	{
		try
		{
			return rmiController.generarFactura(p, tipoFactura, condVenta );
		}
		catch (RemoteException e)
		{
			e.printStackTrace();
		}
		return null;
	}
/*	
	public List<OrdenCompraBean> generarOrdenesCompra(SolicitudCompraBean solCompBean){
		try{
			return rmiController.generarOrdenesCompra(solCompBean);
		}catch (RemoteException e){
			e.printStackTrace();
		}
		return null;
	}
*/	
}
